import { ref } from 'vue'
import { useRouter } from 'vue-router'

/**
 * 认证组合函数
 * 提供用户认证相关的功能，包括登录状态检查、token验证、登出等
 */
export function useAuth() {
  const router = useRouter()
  const isLoggedIn = ref(false)
  
  /**
   * 检查登录状态
   * 通过检查localStorage中是否存在userToken来判断用户是否已登录
   */
  const checkLoginStatus = () => {
    const token = localStorage.getItem('userToken')
    isLoggedIn.value = !!token
  }
  
  /**
   * 验证token有效性
   * 调用后端API验证存储在localStorage中的token是否仍然有效
   * 如果API调用失败，则回退到基础的token检查
   * 
   * @returns {Promise<boolean>} token是否有效
   */
  const verifyToken = async () => {
    const token = localStorage.getItem('userToken')
    // 如果没有token，直接返回未登录状态
    if (!token) {
      isLoggedIn.value = false
      return false
    }
    
    try {
      // 调用后端API验证token有效性
      const response = await fetch('/api/auth/verify', {
        method: 'GET',
        headers: {
          'Authorization': token
        }
      })
      
      const result = await response.json()
      // 如果后端验证成功且token有效
      if (result.code === 0 && result.data.isValid) {
        isLoggedIn.value = true
        return true
      } else {
        // Token无效，清除本地存储的认证信息
        localStorage.removeItem('userToken')
        localStorage.removeItem('userRole')
        localStorage.removeItem('username')
        isLoggedIn.value = false
        return false
      }
    } catch (error) {
      // API调用失败时，回退到基础检查
      console.error('Token verification error:', error)
      // 检查是否存在token来判断登录状态
      const token = localStorage.getItem('userToken')
      isLoggedIn.value = !!token
      return !!token
    }
  }
  
  /**
   * 退出登录
   * 调用后端登出接口并清除本地存储的认证信息
   * 
   * @param {Event} event - 可选的事件对象
   */
  const logout = async (event) => {
    // 如果有事件对象，阻止默认行为
    if (event && event.preventDefault) {
      event.preventDefault()
    }
    
    try {
      const token = localStorage.getItem('userToken')
      // 如果存在token，则调用后端登出接口
      if (token) {
        // 调用后端登出接口，清除服务端的token
        await fetch('/api/auth/logout', {
          method: 'POST',
          headers: {
            'Authorization': token
          }
        })
      }
    } catch (error) {
      // API调用失败时，仅记录错误日志，不影响本地登出逻辑
      console.error('Logout API error:', error)
      // 忽略API错误，继续执行本地登出逻辑
    } finally {
      // 清除localStorage中的所有用户相关信息
      localStorage.removeItem('userToken')
      localStorage.removeItem('userRole')
      localStorage.removeItem('username')
      localStorage.removeItem('rememberedUsername')
      
      // 更新登录状态
      isLoggedIn.value = false
      
      // 跳转到登录页面
      router.push('/login')
    }
  }
  
  /**
   * 页面导航功能
   * 使用Vue Router进行页面跳转
   * 
   * @param {string} path - 目标路径
   */
  const navigateTo = (path) => {
    router.push(path)
  }

  // 返回所有认证相关功能
  return {
    isLoggedIn,
    checkLoginStatus,
    verifyToken,
    logout,
    navigateTo
  }
}